[GitHub Actions]WorkflowをUbuntu-20.04で動作させる場合のライブラリ依存バージョンについてAirflow + Glueを使う構成にて確認してみた
はじめに
先日ActionsのWorkflowにて、OSライフサイクル更新によるubuntu-latestが18.04から20.04に移行するための準備期間に入ったという記事を書きました。
その後、業務にて使っているWorkflowをubuntu-18.04に固定しましたが、20.04へ果たしてスムーズに移行できるものか気になり、20.04環境ベースでの設定を試みました。
結果としては、プロジェクトで利用しているAWSサービスの都合にて現状維持という結論になりそうです。確認の過程とバージョンの依存状況についてまとめました。
調査対象言語及びライブラリ
今回の環境で18.04から20.04に更新が必要となるライブラリと更新後最低バージョンは以下の通り。
ライブラリ | バージョン |
---|---|
Python3 | 3.8.2 |
AWSCLI | 2 |
Java | 8 11 |
この3つと関連がある、担当プロジェクトのライブラリやサービスで主なものは以下の通り。
- Spark
- Apache AirFlow
- AWS Glue
それらライブラリのバージョンを並べると以下のようになります。
AWS Glue | Apache AirFlow | Spark | Python3 | AWSCLI | Java | Ubuntu |
---|---|---|---|---|---|---|
1.0 | 1.10.13 | 2.4.3 | 3.7 | 1.18 | 8 | 18.04 |
2.0 | 1.10.13 | 2.4.3 | 3.7 | 2.0 | 8 11 |
18.04 |
- | 1.10.13 | 3.0.1 | 3.8.3 | 2.0 | 11 | 20.04 |
AWS Glueが依存するSparkバージョンが元で、現時点ではubuntu-20.04には上げられない形になります。
表中のGlue未対応枠で、Python3のバージョンが3.8.2ではなく3.8.3となっている点や、Sparkが3.0.1となっている点については以下で触れます。
Spark 3の動作バージョン
Spark 3.0.0 ではPython 3.6はサポート対象外で、Ubuntu 20.04 はPython 3.8.2以降です。よって、最低でも3.0.0以上となります。Scala 2.12.xに対応するため、3.0.1としました。
Spark runs on Java 8/11, Scala 2.12, Python 2.7+/3.4+ and R 3.5+. Java 8 prior to version 8u92 support is deprecated as of Spark 3.0.0. Python 2 and Python 3 prior to version 3.6 support is deprecated as of Spark 3.0.0. For the Scala API, Spark 3.0.1 uses Scala 2.12. You will need to use a compatible Scala version (2.12.x).
Pythonの動作バージョン
Ubuntu 20.04では3.8.2ですが、Apache Airflowが依存するライブラリのうちpsutil
が3.8.2ではインストールができません。
Mac上での動作ですが、以下のエラーとなります。
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/types.h:37:2: error: architecture not supported
</p> <pre><code>[pipenv.exceptions.InstallError]: Collecting psutil==5.7.3 [pipenv.exceptions.InstallError]: Using cached psutil-5.7.3.tar.gz (465 kB) [pipenv.exceptions.InstallError]: Building wheels for collected packages: psutil [pipenv.exceptions.InstallError]: Building wheel for psutil (setup.py): started [pipenv.exceptions.InstallError]: Building wheel for psutil (setup.py): finished with status 'error' [pipenv.exceptions.InstallError]: ERROR: Command errored out with exit status 1: </code></pre> <p>
以下のIssueについていたコメントに沿って、対策として上げられていたことを実際にやってみました。結果、Pythonのバージョンを3.8.3へ上げることでインストールできました。
When I installed anaconda, it comes with python 3.8.3. Looks like this is fixed and I could install psutils in conda environment. I also tried installing latest python i.e. 3.9. psutil installation is successful here. So, I think this issue is only for python 3.8.2. Since later version of python exists, you can close this issue.
Apache Airflowのバージョン
単純にsetup.pyに因むトラブルが発生しないバージョンを挙げています。
AWS Glueのバージョン
Glueが対応しているSparkのバージョンは、現時点では以下の通り。
GlueがSpark3に対応した時点で、多少問題は発生するかもしれませんが、Ubuntu-20.04に更新できると思われます。
あとがき
Ubuntu-20.04への更新は、依存状況次第でライブラリをより高いバージョンに上げる必要が出てきます。今回見送った要因は以下の通り。
- Ubuntu-20.04ではPython 3.8.2以降となる
- Spark3はPython3.7以降が候補
- AWS GlueがSpark3に対応していない
上記3点でひとまずは18.04での固定となりましたが、Glueのアップデート次第では再度検討してみたいと思います。
参考リンク
- Overview - Spark 3.0.0 Documentation - https://spark.apache.org/
- Ubuntu-latest workflows will use Ubuntu-20.04 · Issue #1816 · actions/virtual-environments - https://github.com/
- AWS Glue
- [macOS Catalina 10.15.7] Failed to install - Unsupported architecture · Issue #1842 · giampaolo/psutil - https://github.com/
- ApacheAirflow 1.10.13リリースによって解消されたpipenvのlockファイル生成時issueについてまとめてみた | Developers.IO - https://dev.classmethod.jp/